/*
Copyright 2011 Mary Suárez Machado

Este programa es de software libre: usted puede redistribuirlo y/o modificarlo según los términos de la Licencia de Gran pública de GNU como publicado por la Fundación de Software Libre, versión 3 de la Licencia, (o en su opción) cualquier versión posterior.

 Este programa es distribuido en la esperanza que será útil, pero SIN CUALQUIER GARANTÍA; sin aún la garantía implícita de VALOR COMERCIAL O SALUD PARA UN OBJETIVO PARTICULAR. Mirar la Licencia de Gran pública de GNU para más detalles.
*/


#ifndef _CADENA_H_
#define _CADENA_H_

#include <crc.h>

 /**
 *@file Cadena.h
 *@brief Interfaz para trabajar con cadenas 
 *@author Mary Carmen Suarez
 *
 */

 /**
 * \class Cadena
 *
 * \brief Modulo que representa una cadena de caracteres
 *         
 * \author Mary Carmen Suárez 
 *
 */
	class Cadena
	{
		private:
			unsigned char cadena[65794];
			int nelem, reservados,perdidos;
			std :: istream * fich;
			CRC crc;
			/**
			@brief Operador de asignación
			@param orig, x=orig
			@return devuelve x con los valores de orig
			*/
			Cadena & operator= (const Cadena & orig);
			/**
			@brief Constructor de copia
			@param orig, tipo de dato que va a ser copiado
			*/
			Cadena (const Cadena & orig);
		public:
			/**
			@brief Constructor por defecto
			@pos inicializa todo a cero
			*/
			Cadena();
			/**
			@brief Destructor
			@pos libera toda la memoria reservada
			*/
			~Cadena();
			/**
			*@return Devuelve el tamaño de la cadena
			*/
			int Size () const;
			/**
			*@brief Calculo del crc32
			*@return Devulve el crc32 de la cadena
			*/
			unsigned int GetParidad () const;
			/**
			*@param pos, posicion del caracter que quieres consultar
			*@return Devuelve el caracter de la posición pos
			*/
			unsigned char GetCaracter (int pos);
			/**
			@brief Lee un texto (máximo 65794 caracteres)
			*/
			void Leer (std::istream & is);
			/**
			*@brief Reordena la cadena de caracteres y vuelve a cargar otra parte del fichero (máximo 32768 caracteres)
			*/
			void RecargarCadena ();
};

#endif
